package com.wu.qqclient.view;

import com.wu.qqclient.service.FileClientService;
import com.wu.qqclient.service.MessageClientService;
import com.wu.qqclient.service.UserClientService;
import com.wu.qqclient.utils.Utility;

import java.io.File;


/*
客户端的主菜单页面

其实 逻辑很简单，就是QQView中,根据用户输入的账号密码，去调用UserClientService，链接服务器（发送账号密码，并获得
        服务器返回的数据），检查用户密码是否正确，
        正确的话启动一个和服务器端保持通讯的线程（ClientConnectServerThread），然后为了方便管理就整一个
         ManageClientConnectServerThread，使用HashMap去统一管理所有的ClientConnectServerThread。
         至此客户端结束了一部分，可以写服务器端了
 */
public class QQView {

    private boolean loop = true;//控制是否显示菜单
    private String key = "";//接受用户的键盘输入
    private UserClientService userClientService = new UserClientService();//这个是用来验证登录的
    private MessageClientService messageClientService = new MessageClientService();//私聊消息
    private FileClientService fileClientService = new FileClientService();//发送文件

    public static void main(String[] args) {
        new QQView().mainMenu();
        System.out.println("客户端退出系统。。。。。");
    }
    //显示主菜单
    private void mainMenu(){
        while (loop){
            System.out.println("-----------------欢迎进入网络通信系统-------------");
            System.out.println("\t\t 1 登陆系统");
            System.out.println("\t\t 9 退出系统");

            //这个地方应该用一个工具类
            System.out.println("请输入你的选择吧！");
            key = Utility.readString(1);
            //根据用户输入进行不同的判断
            switch (key){
                case "1":
                    System.out.println("请输入用户号");
                    String usrId = Utility.readString(50);
                    System.out.println("请输入登录密码");
                    String passWd = Utility.readString(50);
                    //在这里开始做工作，需要到服务端验证用户是否合法，这里可定有大量代码
                    //2.这里我们编写一个UserClientService类 专门用于 登录、注册userClientService.checkUser(usrId,passWd)
                    if(userClientService.checkUser(usrId,passWd)){

                        //先搞逻辑
                        System.out.println("-----------------欢迎用户"+usrId+"登录成功-------------");
                        while(loop){
                            System.out.println("------------网络通信系统二级菜单(用户："+usrId+")");
                            System.out.println("\t\t 1 显示在线用户列表");
                            System.out.println("\t\t 2 群发消息");
                            System.out.println("\t\t 3 私聊消息");
                            System.out.println("\t\t 4 发送文件");
                            System.out.println("\t\t 9 退出系统");
                            System.out.println("请输入你的选择吧！");
                            key = Utility.readString(1);
                            switch (key){
                                case "1":
                                    //根据输入，写一个获取在线用户列表的方法，类型是MESSAGE_GET_ONLINE_FRIEND = "4"; //要求返回在线用户列表
                                    //System.out.println("\t\t 显示在线用户列表");
                                    userClientService.onLineFriendList();
                                    break;
                                case "2":
                                    System.out.println("\t\t 群发消息");
                                    System.out.print("请输入想说的话: ");
                                    String contentToAll = Utility.readString(100);
                                    //编写一个方法，将消息发送给服务器端
                                    messageClientService.sendMessageToAll(contentToAll, usrId);
                                    break;
                                case "3":
                                    System.out.println("\t\t 私聊消息");
                                    System.out.print("请输入想聊天的用户号(在线): ");
                                    String getterId = Utility.readString(50);
                                    System.out.print("请输入想说的话: ");
                                    String content = Utility.readString(100);
                                    //编写一个方法，将消息发送给服务器端
                                    messageClientService.sendMessageToOne(content, usrId, getterId);

                                    break;
                                case "4":
                                    //文件发送
                                    System.out.print("请输入你想把文件发送给用户（在线）");
                                    getterId = Utility.readString(50);
                                    System.out.print("请输入文件路径（形式：d:\\xx.jpg）：");
                                    String src = Utility.readString(100);
                                    while (!new File(src).exists()) {
                                        System.out.print("文件不存在,请重新输入：");
                                        src = Utility.readString(100);
                                    }
                                    System.out.print("请输入文件发送到对方的路径（形式：d:\\xx.jpg）：");
                                    String dest = Utility.readString(100);
                                    System.out.println("\t\t 发送文件");
                                    fileClientService.sendFileToOne(src,dest,usrId,getterId);
                                    break;
                                case "9":
                                    //解决异常退出问题，调用方法，给服务器一个message
                                    userClientService.logOut();
                                    loop=false;
                                    break;
                            }
                        }
                    }else {//登录服务器失败
                        System.out.println("登录失败了！！！用户名或密码错误");
                    }
                    break;
                case "9":
                    loop=false;
                    break;
            }
        }
    }

}
